{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from os import environ\n",
    "\n",
    "environ['optimizer'] = 'Adam'\n",
    "environ['num_workers']= '2'\n",
    "environ['batch_size']= '8192'\n",
    "environ['n_epochs']= '1500'\n",
    "environ['batch_norm']= 'True'\n",
    "environ['loss_func']='MAPE'\n",
    "environ['layers'] = '600 350 200 180'\n",
    "environ['dropouts'] = '0.3 '*4\n",
    "environ['log'] = 'False'\n",
    "environ['weight_decay'] = '0.01'\n",
    "environ['cuda_device'] ='cuda:0'\n",
    "environ['dataset'] = '/data/scratch/mmerouani/data/speedup_dataset_research_batch1001-2000.pkl'\n",
    "\n",
    "%run utils.ipynb"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loading data\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 305800/305800 [09:20<00:00, 545.50it/s] \n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "data loaded\n",
      "(305800, 3592)\n"
     ]
    }
   ],
   "source": [
    "print(\"loading data\")\n",
    "\n",
    "train_dl, val_dl, test_dl = train_dev_split(dataset,val_size=10000, test_size=10000, batch_size=batch_size, num_workers=num_workers, log=log)\n",
    "# train_dl, val_dl, test_dl = train_dev_split_filter(dataset,val_size=10000, test_size=10000, batch_size=batch_size, num_workers=num_workers, log=log, speedup_lo_bound=0.2)\n",
    "db = fai.basic_data.DataBunch(train_dl, val_dl, test_dl, device=device)\n",
    "\n",
    "print(\"data loaded\")\n",
    "print(val_dl.dataset.X.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "input_size = train_dl.dataset.X.shape[1]\n",
    "output_size = train_dl.dataset.Y.shape[1]\n",
    "\n",
    "model = None \n",
    "\n",
    "if batch_norm:\n",
    "    model = Model_BN_ELU(input_size, output_size, hidden_sizes=layers_sizes, drops=drops)\n",
    "else:\n",
    "    model = Model(input_size, output_size)\n",
    "\n",
    "# model = nn.DataParallel(model)\n",
    "# model.to(device)\n",
    "\n",
    "if loss_func == 'MSE':\n",
    "    criterion = nn.MSELoss()\n",
    "else:\n",
    "    criterion = mape_criterion\n",
    "\n",
    "l = fai.basic_train.Learner(db, model, loss_func=criterion, metrics=[mape_criterion, rmse_criterion],\n",
    "                            callback_fns=[partial(EarlyStoppingCallback, mode='min', \n",
    "                            monitor='mape_criterion', min_delta=0, patience=150)],silent=True)\n",
    "\n",
    "if optimizer == 'SGD':\n",
    "    l.opt_func = optim.SGD \n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "LR Finder is complete, type {learner_name}.recorder.plot() to see the graph.\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "l.lr_find()\n",
    "l.recorder.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "lr = 1e-02"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "\n",
       "    <div>\n",
       "        <style>\n",
       "            /* Turns off some styling */\n",
       "            progress {\n",
       "                /* gets rid of default border in Firefox and Opera. */\n",
       "                border: none;\n",
       "                /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "                background-size: auto;\n",
       "            }\n",
       "            .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "                background: #F44336;\n",
       "            }\n",
       "        </style>\n",
       "      <progress value='660' class='' max='1500', style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
       "      44.00% [660/1500 1:34:15<1:59:57]\n",
       "    </div>\n",
       "    \n",
       "\n",
       "\n",
       "    <div>\n",
       "        <style>\n",
       "            /* Turns off some styling */\n",
       "            progress {\n",
       "                /* gets rid of default border in Firefox and Opera. */\n",
       "                border: none;\n",
       "                /* Needs to be in here for Safari polyfill so background images work as expected. */\n",
       "                background-size: auto;\n",
       "            }\n",
       "            .progress-bar-interrupted, .progress-bar-interrupted::-webkit-progress-bar {\n",
       "                background: #F44336;\n",
       "            }\n",
       "        </style>\n",
       "      <progress value='2' class='' max='2', style='width:300px; height:20px; vertical-align: middle;'></progress>\n",
       "      100.00% [2/2 00:00<00:00]\n",
       "    </div>\n",
       "    "
      ],
      "text/plain": [
       "<IPython.core.display.HTML object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 660: early stopping\n"
     ]
    }
   ],
   "source": [
    "l.fit_one_cycle(1500, lr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEGCAYAAACKB4k+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO2dd5gVRdaH33Pv3AkwQx6UpGQliDCOmDFgwpyB1TXgijms67qYWdeAq+uinzkhJhRzQowo4goKiOQkIA45DnlifX9U33zvzJ1wpwfueZ9nnu6urq6u7pmpX586VafEGIOiKIqiAHjcroCiKIpSf1BRUBRFUQKoKCiKoigBVBQURVGUACoKiqIoSoA0tytQE1q0aGHat2/vdjUURVF2K6ZNm7beGJMb69xuLQrt27dn6tSpbldDURRlt0JEfo93TruPFEVRlAAqCoqiKEoAFQVFURQlwG7tU1AUZc+hpKSEgoICdu3a5XZV9hgyMzNp27YtPp8v4WtUFBRFqRcUFBSQk5ND+/btERG3q7PbY4xhw4YNFBQU0KFDh4Sv0+4jRVHqBbt27aJ58+YqCLWEiNC8efMqW14qCoqi1BtUEGqX6rzPlBSFBau38ugXC1i/rcjtqiiKotQrUlIUFq3dyuPfLGbj9mK3q6IoSj1hw4YN9O7dm969e7P33nvTpk2bwHFxcWJtxWWXXcaCBQuSXNPkkpKOZsGaVLq+kKIofpo3b86MGTMAGD58ONnZ2dxyyy1heYwxGGPweGJ/T48aNSrp9Uw2KWkp+LvZDKoKiqJUzOLFi+nZsydXXXUVeXl5rFq1iqFDh5Kfn0+PHj249957A3mPPPJIZsyYQWlpKU2aNGHYsGEceOCBHHbYYaxdu9bFp0icFLUULGopKEr95J8fz2Huyi21Wmb31o245/Qe1bp27ty5jBo1imeeeQaAESNG0KxZM0pLSzn22GM577zz6N69e9g1hYWFHH300YwYMYKbb76Zl156iWHDhtX4OZJN0iwFEXlJRNaKyOwY524RESMiLZxjEZHHRWSxiMwUkbxk1cvez25VFBRFSYROnTpx8MEHB47HjBlDXl4eeXl5zJs3j7lz50Zdk5WVxYABAwA46KCDWLZsWV1Vt0Yk01J4GXgCeCU0UUTaAScAy0OSBwBdnJ9DgKedbZJwfArafaQo9ZLqftEni4YNGwb2Fy1axGOPPcZPP/1EkyZNuOiii2LOBUhPTw/se71eSktL66SuNSVploIxZiKwMcap/wK3QliLfCbwirFMBpqISKtk1U0tBUVRqsuWLVvIycmhUaNGrFq1is8//9ztKtUqdepTEJEzgBXGmF8jJlW0Af4IOS5w0lYlpR7JKFRRlJQgLy+P7t2707NnTzp27MgRRxzhdpVqlToTBRFpANwBnBjrdIy0mN/xIjIUGAqwzz77VLcu9gZqKSiKEoPhw4cH9jt37hwYqgq2/Xj11VdjXjdp0qTA/ubNmwP7gwYNYtCgQbVf0SRQl0NSOwEdgF9FZBnQFpguIntjLYN2IXnbAitjFWKMec4Yk2+Myc/NjbmaXKUERh+pT0FRFCWMOhMFY8wsY0xLY0x7Y0x7rBDkGWNWAx8BFzujkA4FCo0xSek6gqBPQVEURQknmUNSxwA/AvuJSIGIXF5B9nHAEmAx8DxwTbLqFYp2HymKooSTNJ+CMWZwJefbh+wb4Npk1SWS4IxmRVEUJZTUDHMRiH2ksqAoihJKSooCaikoiqLEJCVFQWMfKYoSyTHHHBM1EW3kyJFcc018F2d2djYAK1eu5Lzzzotb7tSpUyu898iRI9mxY0fg+JRTTgkb0lqXpKYoSHBQqqIoCsDgwYN58803w9LefPNNBg+u0D0KQOvWrXnnnXeqfe9IURg3bhxNmjSpdnk1ITVFwdmqpaAoip/zzjuPTz75hKIiuyLjsmXLWLlyJb1796Z///7k5eVxwAEH8OGHH0Zdu2zZMnr27AnAzp07GTRoEL169WLgwIHs3LkzkO/qq68OhNy+5557AHj88cdZuXIlxx57LMceeywA7du3Z/369QA8+uij9OzZk549ezJy5MjA/bp168YVV1xBjx49OPHEE8PuUxNSM3S2+hQUpX7z2TBYPat2y9z7ABgwIu7p5s2b07dvX8aPH8+ZZ57Jm2++ycCBA8nKyuL999+nUaNGrF+/nkMPPZQzzjgj7vrHTz/9NA0aNGDmzJnMnDmTvLxg0Of777+fZs2aUVZWRv/+/Zk5cyY33HADjz76KBMmTKBFixZhZU2bNo1Ro0YxZcoUjDEccsghHH300TRt2pRFixYxZswYnn/+eS644ALeffddLrroohq/phS1FDTMhaIo0YR2Ifm7jowx3H777fTq1Yvjjz+eFStWsGbNmrhlTJw4MdA49+rVi169egXOjR07lry8PPr06cOcOXNihtwOZdKkSZx99tk0bNiQ7OxszjnnHL7//nsAOnToQO/evYHaDc2d2paCqoKi1E8q+KJPJmeddRY333wz06dPZ+fOneTl5fHyyy+zbt06pk2bhs/no3379jFDZYcSy4pYunQpjzzyCD///DNNmzbl0ksvrbScitqojIyMwL7X66217qMUtRQsKgmKooSSnZ3NMcccw5AhQwIO5sLCQlq2bInP52PChAn8/vvvFZbRr18/Xn/9dQBmz57NzJkzARtyu2HDhjRu3Jg1a9bw2WefBa7Jyclh69atMcv64IMP2LFjB9u3b+f999/nqKOOqq3HjUlKWgroegqKosRh8ODBnHPOOYFupAsvvJDTTz+d/Px8evfuzf7771/h9VdffTWXXXYZvXr1onfv3vTt2xeAAw88kD59+tCjR4+okNtDhw5lwIABtGrVigkTJgTS8/LyuPTSSwNl/OUvf6FPnz5JXcVNduculPz8fFPZ+N9Y/PjbBgY/P5k3rjiEwzu1qPwCRVGSzrx58+jWrZvb1djjiPVeRWSaMSY/Vv7U7D7S/iNFUZSYpKYoOFvVBEVRlHBSUxR05TVFqZfszt3Z9ZHqvM8UFQW71ZXXFKX+kJmZyYYNG1QYagljDBs2bCAzM7NK16Xk6CMNc6Eo9Y+2bdtSUFDAunXr3K7KHkNmZiZt27at0jWpKQoa5kJR6h0+n48OHTq4XY2UJyW7j9BFdhRFUWKSkqKgloKiKEpsUlMU3K6AoihKPSUlRSGAmgqKoihhpKQoBOYpqCooiqKEkZqi4GzVz6woihJOaoqCRklVFEWJSdJEQUReEpG1IjI7JO1hEZkvIjNF5H0RaRJy7jYRWSwiC0TkpGTVC0JWXkvmTRRFUXZDkmkpvAycHJH2JdDTGNMLWAjcBiAi3YFBQA/nmqdExJusiunKa4qiKLFJmigYYyYCGyPSvjDGlDqHkwH//OszgTeNMUXGmKXAYqBvsuoWqE+yb6AoirKb4aZPYQjgX4+uDfBHyLkCJy0pqE9BURQlNq6IgojcAZQCr/uTYmSL2WSLyFARmSoiU6sbOEt0RQVFUZSY1LkoiMglwGnAhSbYqV8AtAvJ1hZYGet6Y8xzxph8Y0x+bm5uNevgL6talyuKouyx1KkoiMjJwD+AM4wxO0JOfQQMEpEMEekAdAF+Sl497FY1QVEUJZykhc4WkTHAMUALESkA7sGONsoAvnRmFU82xlxljJkjImOBudhupWuNMWVJqxu68pqiKEoskiYKxpjBMZJfrCD//cD9yapPKLrymqIoSmxSc0azs1VLQVEUJZzUFAX1KdRPjIHJz8D2DW7XRFFSlpQUBV15rZ6y6lcY/w/44Cq3a6IoKUtKioLoKjv1k9Iiu925yd16KEoKk5Ki4HVUoVwthXqKqraiuEVqioLHNjolZSoKiqIooaSkKPi89rHLylUUFEVRQklJUfBbCqUqCvUU/b0oilukpCikOaJQVlbuck0URVHqFykpCl6vWgr1Eh0Wpiiuk5KiELAUVBQURVHCSElRUJ+CoihKbFJSFNI89rFLdUhq/ULnjSiK66SkKDiGAmXl6miun6hvQVHcIiVFQUTweUW7jxRFUSJISVEA61dQR7OiKEo4KSsKaR6PWgqKoigRpKwoqKWgKIoSTcqKQppHKFVHs6IoShgpKwo+r4fiUhUFRVGUUFJWFBqke9lRXOZ2NRRFUeoVqSsKGSoK9Q/18SiK26SuKKSnsaO41O1qKLHQwHiK4hopLApqKSiKokSSsqLQMD2N7UVqKSiKooSSNFEQkZdEZK2IzA5JayYiX4rIImfb1EkXEXlcRBaLyEwRyUtWvfyopaAoihJNMi2Fl4GTI9KGAV8bY7oAXzvHAAOALs7PUODpJNYLgCYNfGzeUYLRyJyKoigBkiYKxpiJwMaI5DOB0c7+aOCskPRXjGUy0EREWiWrbgC5ORnsLCljm3YhKYqiBKhrn8JexphVAM62pZPeBvgjJF+BkxaFiAwVkakiMnXdunXVrkhuTgZCOeu2FlW7DEVRlD2N+uJojjUGMWa/jjHmOWNMvjEmPzc3t3p3Ky+n///+zLC0MazZoqJQb9CuPEVxnboWhTX+biFnu9ZJLwDaheRrC6xMWi08HrxZTTjZ8zOrC3ck7TZKVVFRUBS3qWtR+Ai4xNm/BPgwJP1iZxTSoUChv5spWfi69mdfz1o2r1uRzNsoVSFgKejkNUVxi7RkFSwiY4BjgBYiUgDcA4wAxorI5cBy4Hwn+zjgFGAxsAO4LFn18pOe3RyATZs3J/tWSsKopaAobpM0UTDGDI5zqn+MvAa4Nll1iUl6AwC2bCms09sqFaA+BUVxnfriaK57fFYUCrdscbkiShAVBUVxm5QXhe3bVBTqDWopKIrrpLAoZAFQVrSdolINd1E/UFFQFLdJYVGwlkIWxazVuQr1A7UUFMV1UlcUHEdzlhSxZssulyujWFQUFMVtUlcUApZCkc5qri8YZ81sXWRHUVxDRYFitRTqC2ooKIrrpK4opGUCkOMpZs1WFYX6gaqCorhN6oqCxwO+hrRIV0dzvcHvaFaHs6K4RuqKAkCjVgwq+5jiTQVu10QB1FJQFPdJbVFwuHjdo25XQQG1EBSlHpCQKIhIJxHJcPaPEZEbRKRJcqtWB2xfD8AOXXytnqCioChuk6il8C5QJiKdgReBDsAbSatVXXHuiwAsKWvJdl2W033UUlAU10lUFMqNMaXA2cBIY8xfgaSuoVwndDmeovSm+CjVYan1AhUFRXGbREWhREQGYxfG+cRJ8yWnSnVMWiaZFOsEtvqATl5TFNdJVBQuAw4D7jfGLBWRDsBryatW3SG+TDKlmLU6V8F9tPtIUVwnoUV2jDFzgRsARKQpkGOMGZHMitUV3vQGZFLMMu0+qgeoKCiK2yQ6+uhbEWkkIs2AX4FRIrJHjOP0pGfRwFOi3Uf1AbUUFMV1Eu0+amyM2QKcA4wyxhwEHJ+8atUd4ssix6uO5vqBioKiuE2iopAmIq2ACwg6mvcM0jJp6C3RUBf1AbUUFMV1EhWFe4HPgd+MMT+LSEdgUfKqVYekZdBASjQoXr1ARUFR3CZRR/PbwNshx0uAc5NVqTrFl0WWlLC6cBfGGESHQ7qHWgqK4jqJOprbisj7IrJWRNaIyLsi0jbZlasT0jLJoJii0nIKNu10uzaKoiiukmj30SjgI6A10Ab42Enb/cnIIaNsG0I5c1YWul2b1MY/eQ211hTFLRIVhVxjzChjTKnz8zKQW92bishfRWSOiMwWkTEikikiHURkiogsEpG3RCS9uuVXib0PwFu6k06ykrd+/qNObqnEQbuPFMV1EhWF9SJykYh4nZ+LgA3VuaGItMFOhMs3xvQEvMAg4CHgv8aYLsAm4PLqlF9l2h4MQB/PYiYsWFcnt1TioaKgKG6TqCgMwQ5HXQ2sAs7Dhr6oLmlAloikAQ2cMo8D3nHOjwbOqkH5idOsE2Q24ZJ2VhA2bS+uk9sqMVBLQVFcJyFRMMYsN8acYYzJNca0NMachZ3IVmWMMSuAR4DlWDEoBKYBm51IrAAFWN9FFCIyVESmisjUdetq4cve44G2+XTcNReAn5dtrHmZSjVRUVAUt6nJyms3V+ciJ3bSmdg1GVoDDYEBMbLGbCGMMc8ZY/KNMfm5udV2a4TT9mAabF5A17TV/LRURcE11FJQFNepiShUd4jI8cBSY8w6Y0wJ8B5wONDE6U4CaAusrEHdqobjV3g7/Z98v2g9Rhsnl9D3rihuUxNRqO5/8HLgUBFpIHamWH9gLjAB66sAu27DhzWoW9XoeAykZdG4vJDFazYz9fdNdXZrJQQVY0VxnQpFQUS2isiWGD9bsV0/VcYYMwXrUJ4OzHLq8BzwD+BmEVkMNMcu+1k3eLxwxuMA9ExfzV0fzK6zWyuhqCgoittUGObCGJOTjJsaY+4B7olIXgL0Tcb9EmKfQwEY3vwrzl7Vhme/+40rj+7kWnVSEl15TVFcpybdR3sWTfaBZh3ps+lzOksBD342n7en6mS2OkW7jxTFdVQUQjnX9liNu6Axh3Vszt/fmUn7YZ8ye4WGv6gbVBQUxW1UFELZ+wAA0j+8klG953NS4+UM8n7DRc98x4T5a22eshIoLdav2mSg71RRXCeh0Nkpg9cHx94Js8aSOe5GngXwwd28xiuvHc/y9HQuKX8vkN1cNh7JyIbyMmjeCTKS4oJJIVQUFMVtVBQiOfrvcORN8NH1UDAVOvQja877XLXzE8rLwx2gMurk4EFGIxj4GmxYBOk5cODAOq74HoBaCoriOioKsfD64OxnoKwUvGnIaY/CtnV4TDnk7EVJWTlfvfUEe80fTZ5nsb2maAu8ckawjEatoUk7aNrelUdQFEWpDioKFeENeT3ZwZAaPq+HAX+6AbiBJX+s4PsJ45m/eCG9yhewn+cPKxSjT7OZj7oF+t9Vt/XeXVFLQVFcR0WhhnRs14aOF1/Ouq1FjP7fMhYUlfLuwi9ps3kaxzf8ja7fPwKN20L+Zdb34PG6XeV6jIqCoriNikItkZuTwS0n7QfArpL9eeTzBZw+aQFvZz1Ir09ugk9ushmv+AbaHORiTesxuvKaoriODklNApk+L3ee1p03rj6ah2RI+Mnnj4PhjWHuR+5Urj6j3UeK4joqCknkoH2b8dTfL+fvrUdzbfENLJV2wZNj/wwLxtuGsLzMvUrWK1QUFMVtVBSSTOMsHw8PPYsLh9zIsTsf4tSi+9lmMu3Jb+6DfzaBhzrAyhkw5wN3K+s2AUtBxUFR3EJ9CnXE4Z1b8NXN/fhm/v70HNeBa7wfcOuasfZkUSE8d7Td77wCMrLhp+ehQTPoea57la5zVAwUxW3UUqhDOrfMYWi/Tsz/18nMaH85B+56js+bRExye/5YWDMHxt0C7wyJXdCeivoUFMV1VBRcINPn5fW/HMKl/ftw5eozw0+uXwhPHx483rm5bivnKioKiuI2KgouISL89YSuPDaoN/e3fpI7SuJYBZP+W7cVqw12bISfX6z6l79aCoriOupTcJkze7fhzN4XsWHb+Tz/XAOmr/fydPpj9uQ+h8MPI+GIG61/YXfho+th/ifQug+0yUv8Op2noCiuo6JQT2iencHga//Jsw9/y1nbm7NXtpcrs7eSx//gw2shszFkt4QT7nW7qpWzfZ3dlhZV8UK1FBTFbVQU6hHZGWn8fEd/Ji0+kGHvzuL86dv4Kn0vOiwYF8zUtD3k76EOaO0+UhTXUZ9CPUNEOKpLLt/ccjRXHduVYSVD+UyOZOkRD7OjSVf45K8wbTSsXwyvnw9LvnO7yrWIioKiuI1aCvWUjDQvfz9pf+b1as2Ax7rB1zDUexC3+xbCxzcEMy76AobX4nKhZSVQ+Ac061jzsqSKvgHVBEVxHbUU6jndWjXilSF9AXir7Fjmlu8bnWn9Ypg5FsodR+32DXa/rAQWfFa1bpnPb4fH+8C2tTWvfJW7g1QVFMVt1FLYDejXNZdlI07FGMPf3uzIowuOD8/whBN1dfs6EA+MHwYHnA+z3rbpfxoLXU9K7Ga/fWO3OzdZx3Zdoj4FRXEdFYXdCBHhgfPyGPHO2zSZM5ptJotbfG8HM3x+e3B/Vkj65uVVuYvduNJAqygoitu40n0kIk1E5B0RmS8i80TkMBFpJiJfisgiZ9vUjbrVdzJ9XoYNPpEel4zkibKzuLr4RqaU71/xRWXFid/A7weoyjXRhThbnbymKLsbbvkUHgPGG2P2Bw4E5gHDgK+NMV2Ar51jJQ5Hdcnlo+uO5LPyQxhYfDftd73BqUX3x84cGipj21oYfToUroCtq+PfoHRXzStZ1ZDggclrKg6K4hZ1Lgoi0gjoB7wIYIwpNsZsBs4ERjvZRgNn1XXddjd6tW3CshGnMuGWYziqSwvmmPZMKDuQZb5O4Rk3/w4bl9j96aNh6UT4b3f4z36wZWVEqc5XfsnOmlfQVHWdCEcM1GJQFNdww6fQEVgHjBKRA4FpwI3AXsaYVQDGmFUiEtPLKSJDgaEA++yzT93UuJ7ToUVDXr38EMrLDTe82ZopM+cxOv0hunt+txlmvmV/+t0a3S20cSk0am33y8th/QK7XyuWQmnV8ut6CoriOm50H6UBecDTxpg+wHaq0FVkjHnOGJNvjMnPzc1NVh13Szwe4f8G92HoKYdxSvGD0Rkm/tvGUgplx4bg/hd3Bvdrw1Ko8opyaikoitu4IQoFQIExZopz/A5WJNaISCsAZ1sLA+VTDxHhin4dWXjfABbl3cFtJZczuPiO+BdsWRHcn/xkcN8Vn4JaCoriNnUuCsaY1cAfIrKfk9QfmAt8BFzipF0CfFjXdduTSE/z0OWMW/nXvY/QuFv/+BkLC+w28uu8ViyFKnYfqaWgKK7j1uij64HXRWQm0Bt4ABgBnCAii4ATnGOlhqR5PTzz54O4u9XTsTP4LYUdG8PTIy2F0mLY8FvVbl6yIzjLOhHUUlAU13FFFIwxMxy/QC9jzFnGmE3GmA3GmP7GmC7OdmPlJSmJcsOFwbWeXyo9ObBfusmxFDZGNPjb1lgn9KqZsPIXePtS+L88O9M5Ud6/Er6ooOsqCrUUFMVtNPZRitAiOyOw/0bZcYH9tJU/U750Erx/VfgFk/4Lj/eGZ4+C546BBZ/a9ES6lUID4U0bHTvPxzfC4xEL8KiloCiuo2EuUolrpmC2rGTcvkfD/bcGkj2jT028jKo6oNMbxk6f9nJ0mn/ymloKiuIaaimkEi33RzofR7rPS9Ftq1k9dDb/LPlz1cqoqgM6nihUiIqCoriFikKKkpGRxd6t2zHo+gf5oaxHIP364usqvvDzqvgIgPTsxPMa9SkoituoKKQ4++2dQ6/bvqYIHwAflx9OmbE+gb8VXxV9wZIJdiRSVUh4bQb1KSiK26goKOQ0yCLjtqUwbDnLRpyKV2yjPKm8J/eVXBiVv3jrertTWADjboWyCuYjrJkFj3RJrCJqKSiK66goKJaMHMhsbPf3Pw2AKfcPZp8jBrK0fC/mlQfjTJ3274/YVVJmRyz99CysnG5PbFsHm/+IXX5pUQKVUEtBUdxGRUGJ5twX4IYZ4E3j4lOOJveOuWw9c1TgdFO28eGMFbDdWgzGa7ueeKQzjOxJeawv/XhiEUrAUqjpA9RTFn0Fq2e5XQtFqRAVBSUaXxY06xA4zM5Io2+XNoHjDp5VjHz3WwoL7fzCu96dztq3bw6c37Aths9h09LY9wqNjxQItb2HqsLr58IzR7pdC0WpEJ2noCSGLyuwO8L3AvigqMgHAkWr59Nyw4uB80s3bCc38nMj3kzo8lLweO1+WQkApWXlgT/MTduLaZiRRnqafr8oSl2g/2lKYoSIgp8MsY34w77nwtKziTHBLd6kN0cIgEAAvaXrtwJgjKHPv77k2jemV6PCiqJUBxUFJTG86QlnbSGF0YkfXR++LKif8hBRcASivNx2Hy3bsAOAL+euSbyeiqLUCBUFJTFE4JwX4IZf4IJXK8zaUmI0/gAP7cuCRQs45uEJgSQTYin49wXDrpIyvp5XBTF4+ggYf3vi+RVFiYmKgpI4vc6HZh3tkNUGzatVxH6v9+XKwscCx/NXBH0NZc6w1aayjYIVBRRtKuAy72dk+TyYiuYuFG+HNbPDFwmqKit/CQ/zXbwd8+ShlC//qXrllZXEWP+6mhRtgycOhj9+rp3yFKUCVBSUquPxQI9zqn354LSgpdBtTF/MuoUAlDkzpXOlkM4v9+LkhcO5x/cqrUv/oGBTBTGXVs6oWgXmj4PfgnXg9x9tJNgfnwimrZiOrJvHvFedUVWPdIVPbqZCfpsAs96x+5/cBI92s4JVU1b+AusXwlfDa16WolSCioJSPUyMxXPOeqZaRU0eZ8Nrb90e7oxuvWMeYLujbnn4Kcp/HQvzPrG3N4YJC9Za/8N2J4xGotbLm4Ph1bOCx4XOHIpVIeJSZgVq4y7HQtm2BqYGR1jF5NWz4N3L7f58f6jxWljW1P+uReCpw+Cti2pepqLEQUVBqR6HXAmNgnMXOPgv0Htw8Lhld9gvsZDcny/cwuK1W9m6Y0dYuq/cNsxj0u/nrYx/4Xn/CnjLht34duE6Lhv1M0c/MiH4Ne4JjrBeXbiLSYvWs2ZLAo2y2H+DHUWh/g177xLS2LqrJOZliVELcy5CBXjtXJj3cc3LXDsP3rk8fPRXdVk9G3bFGFyg7JaoKCjVI3c/uHlu8PjU/4SfH/otFG9LqCgv5Rz/6ETWFYZ3taQRO6ZSSVk5L3y/BIA/Nu6EYkdMxBvIc8UrU7noxSkc8sDXFO6ouOErc66btDDo2N6105ZZQhq/b9gR87q4FIU8t7/RrcqypFE4wiK1+O/63hUw+x0rMjXlmSPglbMqz6fsFqgoKDXjsOvCRyP9fQncuhTSMhJe0/ku32v8mHEdjUms//3Nn5bTYsmHjPHdR8N0L8YRn+0hGjJrRfDLddmGYLn+4a6h+2u3Wge3CZldvXOrdYAXV0MUXv06xCHsWBzB2drVwCRBFPzPGiKk1cJft5U6l2RPQUVBqRkn3Q/dzwgeN2wODZrZ/eKtCRfTSjayn6cgobx3fTibx9Kf4jDvXIqKi1i60voUNu0oZmdxGVt3lXCwzOcYj/URzAwRiF2lwQ4RoEIAACAASURBVMZ5tdO1tHKTbfQ9lLNo9RYo2hoQhRLSwkQlET78fnqw08iZkBfYVodYojD7Pdi0rPpl+kXBU8OgBuU1EDulXqKioCSPP38AJ/wreJzTuvJrGrWtNMtfvOOCRbKDCbOWAZBOKbNXFjJ/1RbezriXl9P/DcBdH8y2UV2BXSXBbpzZf9iAftu320bfSzkf/d9f4cG2GKfBLTMeHvl8XuCaMse6eHHSUtoP+5RFa6KFL0d2BqyQDYVb2VZUWjNR8E/wC137+p3L4Nmja1BmFeqzcal1bsdada8mz6XUS1QUlOTRJg+OuCF47A/NDdAhToPW7mD428IKi73T93pgP0d20sAJq5FBMfNXbWH5/KlR18xaUUhRaRl5//oykPb+j/MBKNplGzsPhjO9/wPAt8n6LNKlFB/Br+EVztDYf30yl3ayhjvenx04Z5wv+XRK2OmI0J+f/4Ez/m9SzRpPfxdUZPfRruhJgqVlCfou/N1Z5Qk4mscPs87t0GG8fvYEUTBG1/AIQUVBqTvaHxHc73a63YYKBYDHB9ktEy4yhx00EOsTyKCEuz6cw/++/yZwftwNR3GKZzLZL/Wj253jwq6dtbSAwh0lfD/fdlv1aNUQg/0aNyW2S6lny3TSQkTht3XWf3GBbxLfZ/wV+f2HYIFO/3wGJZSU2UYmjTKWrN8e3s1SWszmp0/mrNseY2vhRvjh8diOaP+oqsBKdxKdJ4TlG3bQ+Y7P+HTmqgrzAcH6JNSo++8bo+Hc3UVhx0b4ZxP46bnK86YIKgpK8mnexfZdn/Rg9Lkm+4Yfe33h3SSVcN+Afdgr0zZM6ZQChu6e3+1JX0O6t27EU+mP083zBzMyrqCf59fAtZ1lJWN+Xu5cBw19Emj2dmzbAkDHjRM53hN0oi52uosO8S4AbBjx7UWlPPvdb5Qa+++UISWBchrKLsCEN54bFtNkzY887HuWNe/+A768C7Pg0/AH++U1eKC1ddaXOQsUVfJeVi3+hWFpb/D8xAQc/P76VLRqXiSxvqYr8yksGA8TH078HnXNlhV2O220u/WoR7gmCiLiFZFfROQT57iDiEwRkUUi8paIJB6BTanfXDsF7lgNaenga2jT/I1S4wgfQqxJcQCnjYSTH4KBr4cl98n1cGjbTAA8YvBRxr6y2p4sC1/trZHs5La0MYHjEzzTGPHZfDKwXSgNVvxAV49tJHwltvEXU87j6cGZzu9P/Y0Fq7cGyi42aUxYsJYHP5tPsVP1g9s2DOQfk34/F3q/ZtnaoLO7pNQ+eybFrFhjh8H+umQVhzzwFRe+MNnmmf0hALtWzYvffRRBr2+HcFXaJxQULK8wH1CxpVBeBts3BI8D940hCpWNqhozEL65r/L6uIV/9FVNRoftYbhpKdwIzAs5fgj4rzGmC7AJuNyVWim1j8drLQAg0LB0Ox26ngwnPRCeN97chgMHwaFXRYvIjg2wOdgILhqSxfHeX+xBeWnU5Kx9W2QH9luJbfjSJbpfvZHEHnG0at0GTho5kQzHuighjevesPcrc/6d9m4Y/kV/pGcWF73wv8DxoCe+AqxFITvsQkULV29mzZYiflhs67R4jRWRj2auDnYfVSIKnhJb5wu9X1UeWTYwKso/jyKkUXznMni4Y7BLK4aFsqukjIHP/siuokSWWa3H+N9pvI+R2uKJg+G5Y5N7j1rCFVEQkbbAqcALzrEAxwFO4BhGAzobZk+keSe7zWoGf3orbIU3IDgRzc+RTryhNGsN0Lhd+PmPb7BDM/3/3GMGhp9f8l3YYQNfcFz+cd4Z3Jf2YsBSCCWH2LGWGmAbQZ8jCmV4EMq5OW0sjcRekynhX9+rTHOasyVYtpOvpWymn9cuz7lxa3Dm9cOfz2ddoX0P20tMwCpZvTV2A9xr+OdcP+YXPMbe96++d1le2TBaE2IprFsI9zaDKc/atLkfOudKwifihXQfPTR+PlOWbuSmMdFO/SqzbS1MfsYdZ28sUUwG6xfuNnM53LIURgK3An55bg5sNsb4/5sKgDaxLhSRoSIyVUSmrlu3Lvk1VWqXi96DQW9AeoNg2iUfwwA7fDRgKdw8306EO/4eGF4Y/Fr1z4GIpKkjLpFffK+fG5ExvOG5KO1rBnbLjCrOI7EbqCwpoq/Mo6EjGvltG3CYZy43pH0QyHPwsmdoJsHGdEjaeD7MuDtw3IjoyXC/rQsObX1ywm/4vRvrt5cyeaGNtjpjefRoo/bDPmXLrlI+/nUlEtKw/b52I4vXbqX9sE9pP+xTikud9/L7j7D4q6AVMP42mOasv/3ZrZhxfw+UYZZPhgfbwMLxUfft0DyLIz2zaNsosXkOwz+aExgWHMV7V8D4f8C6+QmVVasEZpy76DCvZ6Of6lwUROQ0YK0xZlpocoysMd+SMeY5Y0y+MSY/Nzc3KXVUkkh2S9g/IiZSh37Q9mC77x9x06iVnQgXSWhXRvbewf0uJ0BayOpwpzwS+/4x/vma7kygD97hq/MyGJvxL470zgFgyNoRvOgLv5eUxVijOoSOnuiQ2l7Cxczj/Pn/WlDIlN/WOHkq+ZoNadiWrFzL8Y9ODBx3vfMzuzPqZHjt3GDedfNh8lPBuoeMwtn8ywdh5e4M6Srq+NtrvJb+ID0Kg/eoiFf/9xu97/0idsiRHRui6l/rrJpprZFI/KJQ00a5eDu8eBKsmVP1a//ZBF45IzytvBxW/Ro7f5Jxw1I4AjhDRJYBb2K7jUYCTUTE/9nRFqilYPTKboF/aGpRArOg//S2nefQoV8w7YiboFUvu9/+qPgWRaxvjfUVz4sIz7soKilLKhaBSG5Key8qzS8K7TwbWZb5J/I9tk5plAb8F5lUfJ80CQrLMmeWN8B53u/oLsvoe/9XgbSyBBrg6TN+CTu+7e3p/PibbcBzttj3kLEzeB+W/WBHG8UgnRJ2lZTz0UyX/q1Hn26tkcjuydoIQwL22f+YDF/cVb3rl0aI6w//hWf7QcG02PmTSJ2LgjHmNmNMW2NMe2AQ8I0x5kJgAnCek+0S4MO6rpviIhk5dluagOOy64lwyUfQ1BnOetCl1rLIcSyHzMbxxcUfAO6gS6HJPnZ/12YrJO2PqvzejmO4trnzpE48eHZPJp5rG3b/+tcP+Z7nqjQbFTXHG3+iWW9ZHHachf89Gh7xPcu4jNsDMZ6AhIai7ivhzmqflDL4+cn8tHRjYM3tgi0hdXr5FBgzkPmrt3DVq9PCuov8w34Ld8QQNr9OhwpVwTSY/S5sraWlWP3Lyf67I6yzw4kp3g4rnEbX3/V2314w9pKql+8XFU8NY0n58a8R8t2I2imvCtSneQr/AG4WkcVYH0MlweuVPYqGuXDI1db5nCjZe9mtvwsgp5XdZjYJikw89jkcbggxz/c/zXZBhdL+KMiImFz36xuJ168KZJkdDP6sFzLh/rD0vUKWNj0wfUXMa9PTPHwQ4rMAu072vWmjuCavYcxrvHF8JqE0ly1hx/6G/YJnf2TFeluvshhNyLlP/Y/xc1az/13jQ661v6P5X41m+tQfY9+wtBhjDO2HfQovHAfvDIHHelVazwAF0+DdK6InAu7aElxzo3QnfH2v3X/zT/DVPXbf36iX7oK5H1BlqhpgsHh7xR8Y/m7SRV/A+sXx8yUBV0XBGPOtMeY0Z3+JMaavMaazMeZ8Y8xuPtZNqRIiMGAEtO6d+DWZTezWmX0cGK5atMWuDDfwNchqCq3zoq/1+uwKcn4at4H07PA8DZrDZRGTymqLxu2CIgaw3cZhYlv8L2OJMVz3Kd9IFt43ICr9Uu/nXJz2JbfOrf4gvqYSfr8jPbPIxYqBf8RWeozw5tuL7VyRG7zBbrL26XaI7RPp/0feJyezcnNwdJc/JEjhtq2s2RLxb+9YJPn3fWnFIhJj7MJL5WV25NmssbA9YgDK2ItjP+CSb4P7NR195LdyErUUnj0a/t0h/vnQ4cclMUaSPdEXJo1MvH5VoD5ZCopSNXyOY9kfqK33hbZLqPuZVmS6nQ7/WBbb+ogce9+geXTIjbSMoPDUNg1bwPUh/cV/TK5WMad4Y68h3SQ9etz9L3edECNn4gzw/sw3zUbQoUVDMhz/hj/uVCSv+h7kZt87geO3Pbdzbu+gCB4+4pvAyKhVhbaMG1+bHIhcG8qTExYj29bSXlYx9s4z2PlliDU190O78NKPT1JSbAVlxUYrZjuKS7nohSmURzpsYzmVa+pTCHQfJRh1dkO0byqckL/PyCVdjYH1C2pnqdcYqCgouy/7HGrN9cOutccNmsFNs+CA88LzpYUMOe1tV25jV3jXCFnNoHP/8DSvz1oatYm/e6FBC/CFDMutyUiTnZuC+92tZZDXrlF4Ho+Ppg0TCxKwrt/9cc/l7FjOLSfuR6bj87BhPMIRymmWFp1+xcHRAptOCR3LbPDBDEp5/dOvWJb5p7A8D3++gJ8zr+HbjL9xQdp3ZP3wb56482IY3pj/+8DOQ/l88nSKHVGYOO8PjDF0v/tzJi1ez+adkdZMLFGo4bBQf5dVVX0K8e4ZainsjBiK/NPzduvLIhnUMJi6orhIwxZwTwKOX3/j2+7Q4Jd/5PKRDZpbAbhrPbxwvF2v2ZsO6bH75KtNejYUFVofShViPFXIxqXBfcd57oscvpoWPRcjHrmtO1Z4/uSee7PgPSsKJ3XJhiWwJaczjbbavu8MSshM8xA5WKrjruAqb1d6P6YcoaMEg/d1khV0X/EjRLSrb6cPj6rDdWl2HErJji3ggz827cLntY3/S98t4PmQkaFlhvBB76tnwdqIORHlZfy0eDV9/ceTn2Z+o8NZ6dmbJrKTc0bN4cNrj6B5djptmzYgCv8optnvwv6nMXtrQ+aVtuL8o3qFN/zl5XBvyIdGnOVQF67dTtdAfWdaAejkzIj+zJlLUtt/mw4qCsqejzcNrpgAzTvb0UeTn4R9Dw/P47cIQq0Db3rVG+4uJ9pZwMudsBbpOeGLDWX4RSHGHIzq8nxI+AS/n2Lb2vA8mY0TH8kTCEkS5zTldM/NgHWQscSGIm/UuCk4jzn3jqPwPBl9Xfqq4Ozn23xjos7f6hsb834He6KHDJcZwSuGpmJvWoaHdLFCmEkxs9YFu1ZMZIdI4R/w1CHhaSXbGfLiJGb7tXP8MPYHnim+hpHpT5Evd9P6hatoxA7KrpmEd69u4deXhsyAf+cyegIZ5W0oPOhXGqeHiEJpuAVl/tM15iSt2au20tUvjt86gSSHR3zIJMlS0O4jJTVokweZjWyX0z2boW2+TXe6W/CGfB9lOdaEtxoxGbueBHsfYPdPuBcOihje6G9wGyZp4mVWUztiavPvwbRmnWBLAfyna/zrQqmsX3zc36MX3An5avUs+y7aEgOY9N/E7p8Axdj36B8hVR7SlGVEmCiJdgq1lOgZ4yPT7cS+I72zyZUtZEgpy548255cPpnSB/flplHfQEl0d1kXzwquu+8RuC/4uy7eFT5PQkK7/vz1NSZqMqNzItzq8MWwWGoBFQUl9Qj9+j/vJRvBNZRQSwGg79DY5fQaCC32C0/z+IIzdJt3jvZJNHTWimjQomp1btAcukaPMorCl2nna4R+kfpniydKJZYCU1+0I7xCCR259W4dxLJ0fjdneO3w1vKQ7+1n+/zOX9Pe5jLvZ3yc/2uYYFRET1kW91wuQZFLp5Qtu0rY9sX9pBVtZvOi//H9vD9iXvdqevg8g99WxQ/Ns9mZw7FlV2nMiYr73fYBXW77KJigloKiJAGPN/qfyz8KyR96+5SH4c6I7hiAY26zQ1nDykuD/nfDIVfZrqRIUfCXWR1LIVZjnZYJbfLDj3NCwn9c9F50HSvDU4koQLQlUNm8kFomKyv8d3ZtWrCxbD53NDemvc89vlc5YPZDCVsKnWKEH/FzaG6wkS7Cx6czV/Hz7/YdeDDMWLo63qVhjBv/Wdxzve/9gklzf2fbxjUxRSGbnSGTElFLQVHqjK4n223oCJC0jOC+v6EPjfC6r7OqXFYTO9N6wEO2EfcvIuRNhzOfDA4jjOdTiBezCWKLQq8L4OIPoNWBTj0jRKHD0dHzL2KRu3/IfRJwNUYGHkzkHrVJJWHEq0Of5vFneXfa9H1gvwgft703KzBxz0t5zEbcxPAW/G3TP+Pe41jPDI4c24s2z/cgM0bolAayK+w+m0qS4xJWUVCUSPY5FC7/Eo66Jfb5KyfC353Vzc54Ak77L1z8EfzlG+hyUnjezv3hnBdg2HLoc1EwFLW/+2jga/Zr3s/+p8WplMT2cezaYr/S050vdY83KArisQ28P1x5RYTOxE3EUogkowJRiHSQVofI91rBJL9IWktioUn6FX5UeSaCMaj83VLP9vmdK9LGReWThG0Uy6j04Ap12exkY+tjWd+wSyDtPO9EGoes83H3uCVVKj9RVBQUJRbt+lrHdCyy97LDYcF2zeQPsY1v24Oiv7JFoNf5wS6qNs7s6gaOpdDt9PD5ERX1E8dyAEfO3oXgCCT/13xut+g8kYR+eVfmU4hFZZbCRdFBAKtWfnK6SiplrwPCjw/+Cx09q+mRvY2j9rPi65nzbq3ftpOspLTxPrRoGux+vDHtfb7MuDVwfMbBCYh9NVBRUJRE6Xy83VZnVJKfc56Dod9Ff1n7HdDxRKFp+9j39YtCqPM8tPsIoJkz7+CA82OXndMaTv1P8DiWpXDl99Fp3UNCaPi71/Y/DY65PTpv5BDgSJq2r/h8FeZZVImseNF0HYZERH3NyEEwfFo6lKz05I3oz5QS0vfuVqEYntCjir6iBFFRUJREGfga3PhrzSadZeTEju80ZLxtmEN9F6c/BpeOg/NfhsFvQm7ESKcWXW3XFQR9GjmtwmMqgbVehhfCuS/ABa9G3/vKibDPIfZeQ7+N7VNo1SvaUjnr6ZB7hAhW7/AZyUDFjfotiyoPJ1ITIa6Ic5+3Q5TjETlBLNQiijPxLCpfLGIJZwRN2nUPrmkei6zkhGDRyWuKkii+rMq/aKtL807Rff8HXRp+fPAV0KKL9Ut8fgdc9QOkOY3l0bdap3PzTrClig2Jv7uovSMshQWxr/UHfROP7ZoK/Yr1N9qmPBi9NpR4QurNsAsv+Ud8HXULbFwCcyK6myJFwZsRHMlVHZp2gE1LbTkViXzkudBRVmvnEpcGzeKvNw6JhU/JbhnfcvzzB7UfgsVBRUFR6hsd+sWefezxQKfj7H73iJW6PN6gqDRqHb/sNgfZ7qQORweX4YxscEO7j679KXpFtL8tjB59FCoKaZV81R/8F8hoBJMeDXaj+X0amY2sjyZSFCK7UU5/zDaYf/xkZ6j72fsA6D88xjKsEfhjFIVaZgB3rIG1c+z8E//EsmadYONvtiHeEjJsddOy+OU3bAmbQ1b0y7/czu/wExl8MRZZTYOi0GI/aHcw/PKaPU6W5YR2HylK/eOSj+G62NFPE+bAP0G3M6LT0xvC9dNtt9MhV9m0qK9wRxTEY7us9uphj8980n5hZ+dCjmMN5A+xW3/j5ReLW2KsAZDVzPocTv0PtD/SpmU4znx/6PDmnaHDUbZLJ3TUUu+L4NBroOMxzv0yocdZcPID4cuyHv9P6HK8bYQrwj/aKvLZfZlWODOyoUk7m3bDdFuXTsfGHmXV45zotJ4RohR5n4REoVlwkmD+kPAutnaHxL6mFlBRUJQ9kbOfhoEx/Adgu0RE4KQH7WzuSB+C/yvaG/EV3eciuHFGeNopj8DfFsA+h9njPCesh390VehaFv9YCoNet/v+L3R/4+gfYuqfIR6r2+bkB61T3H/s56aZwVnn2REO+8OvJ4rTRgaf0b+98Ve4bmp03kgifQw5re3ggcg1O3L3s74aPxExj+KObAslLR3WOXGf/F17ACf8K7G5JNVEu48UJVXxeMATo8/aLwa9BydQRsi8iNAve48HLv8KWnSOfZ1/2VV/43j0rTDuluASq5H4ReTkByC3K3Q8LvzcSQ9Az/OCcaf8s31jrYSWfxn87HTl+BfXSdRXlOa8r9xu1mfQ42xrWQ2dAD88Bl86K+CV7LATCv/0NqyZZYe2ThsFA1+3X/8t9rN1O+tpOyz5gVax73f6SJjxBuzVM7H61QIqCoqihOPLhFuXBrt2qku7CmIu+Ucy+S2DvlfYn3j4RSGrKRz51+jzXp8dQeXH370V6ljvfDws/so5v7dtrBNdFCeAMyEtszFc82O4RXPEjdZyeO8vwVUAu55ofwDu3hS+2t/dG+z1oUHubl8JD4T4hPY51P7UISoKiqJE06CS8fs1pUM/OOsZ+6VdEb4G9qs7siurMvIuhbJSaxV8NdyG8bjwnWADfPazMPf9oL8kURo7fob9T4k9aqnX+db30DBGwENPRG+9/3r/9tBrbffUFd9AaXSYi0BXW5LWUQhUy9RktSGXyc/PN1OnJtAPqCjK7snaeXbx+iNurH4ZG5dakUvEuZsI29dbn0ltLZKUKCW7YPJT1k9SnVnnIYjINGNMfqxzaikoilJ/adnN/tSE0MCFtUEsK6Au8GXCUTcn/TY6+khRFEUJoKKgKIqiBFBRUBRFUQLUuSiISDsRmSAi80Rkjojc6KQ3E5EvRWSRs01OYA9FURQlLm5YCqXA34wx3YBDgWtFpDswDPjaGNMF+No5VhRFUeqQOhcFY8wqY8x0Z38rMA9oA5wJjHayjQbOil2CoiiKkixc9SmISHugDzAF2MsYswqscAAt41wzVESmisjUdetirDqlKIqiVBvXREFEsoF3gZuMMVsSvc4Y85wxJt8Yk5+bm5u8CiqKoqQgrkxeExEfVhBeN8b4A6evEZFWxphVItIKWFtZOdOmTVsvIr9XsxotgPXVvHZPQt+DRd+DRd+DZU9/D3EiD7ogCiIiwIvAPGPMoyGnPgIuAUY42w8rK8sYU21TQUSmxpvmnUroe7Doe7Doe7Ck8ntww1I4AvgzMEtE/MHZb8eKwVgRuRxYDsRZZVxRFEVJFnUuCsaYSUC8SFL967IuiqIoSjipPKP5ObcrUE/Q92DR92DR92BJ2fewW4fOVhRFUWqXVLYUFEVRlAhUFBRFUZQAKSkKInKyiCwQkcUissfFWBKRZSIyS0RmiMhUJy1mwEGxPO68i5kikhdSziVO/kUicolbz5MoIvKSiKwVkdkhabX23CJykPNeFzvX1vHSW4kR5z0MF5EVzt/EDBE5JeTcbc4zLRCRk0LSY/6fiEgHEZnivJ+3RCS97p4ucaoafHNP/puoEsaYlPoBvMBvQEcgHfgV6O52vWr5GZcBLSLS/g0Mc/aHAQ85+6cAn2FHhB0KTHHSmwFLnG1TZ7+p289WyXP3A/KA2cl4buAn4DDnms+AAW4/cxXew3Dglhh5uzv/AxlAB+d/w1vR/wkwFhjk7D8DXO32M8d5D62APGc/B1joPG/K/U1U5ScVLYW+wGJjzBJjTDHwJjYY355OvICDZwKvGMtkoIkzo/wk4EtjzEZjzCbgS+Dkuq50VTDGTAQ2RiTXynM75xoZY340tjV4hXoatDHOe4jHmcCbxpgiY8xSYDH2fyTm/4nzJXwc8I5zfb0NXmmqHnxzj/2bqAqpKAptgD9CjguctD0JA3whItNEZKiTFi/gYLz3sae8p9p67jbOfmT67sR1TrfISxJcr6Sq76E5sNkYUxqRXq+RxIJvpuLfRBSpKAqx+vz2tHG5Rxhj8oAB2PUq+lWQN9772NPfU1Wfe3d/H08DnYDewCrgP076Hv8eJPHgm3v8u0iEVBSFAqBdyHFbYKVLdUkKxpiVznYt8D62K2CNY+4SEXAw3vvYU95TbT13gbMfmb5bYIxZY4wpM8aUA89j/yag6u9hPbZbJS0ivV4iFQTfdM6n7N9EPFJRFH4GujgjKNKBQdhgfHsEItJQRHL8+8CJwGyCAQchPODgR8DFzsiLQ4FCx6T+HDhRRJo6XQ0nOmm7G7Xy3M65rSJyqNOvfjEJBG2sL/gbQYezsX8TYN/DIBHJEJEOQBes8zTm/4nTdz4BOM+5PqHglW7g/J4qCr4JKfw3ERe3Pd1u/GBHGSzEjq64w+361PKzdcSOFPkVmON/Pmxf8NfAImfbzEkX4EnnXcwC8kPKGoJ1PC4GLnP72RJ49jHYrpES7Ffc5bX53EA+tjH9DXgCJyJAffuJ8x5edZ5zJrbxaxWS/w7nmRYQMnom3v+J8zf2k/N+3gYy3H7mOO/hSGx3zkxghvNzSir+TVTlR8NcKIqiKAFSsftIURRFiYOKgqIoihJARUFRFEUJoKKgKIqiBFBRUBRFUQKoKCj1GhEpc6J6/ioi00Xk8EryNxGRaxIo91sRScmF2eMhIi+LyHmV51T2ZFQUlPrOTmNMb2PMgcBtwIOV5G8CVCoKbhEyE1hR6iUqCsruRCNgE9h4NiLytWM9zBIRf6TbEUAnx7p42Ml7q5PnVxEZEVLe+SLyk4gsFJGjnLxeEXlYRH52gsdd6aS3EpGJTrmz/flDEbuOxUNOmT+JSGcn/WUReVREJgAPiY3n/4FT/mQR6RXyTKOcus4UkXOd9BNF5EfnWd92YvkgIiNEZK6T9xEn7Xynfr+KyMRKnklE5AmnjE8JBoZTUhm3Z8/pj/5U9AOUYWeizgcKgYOc9DRs2GKAFtiZpgK0J3wdgQHA/4AGzrF/9uq3wH+c/VOAr5z9ocCdzn4GMBW7zsDfCM4O9wI5Meq6LCTPxcAnzv7LwCeA1zn+P+AeZ/84YIaz/xAwMqS8ps6zTQQaOmn/AO7GxvZfQHCd9SbOdhbQJiIt3jOdgw0D7QVaA5uB89z+neuPuz9qyir1nZ3GmN4AInIY8IqI9MQKwANiI8CWY0MW7xXj+uOBUcaYHQDGmNB1BvwB0qZhxQRsXJteIX3rjbHxgH4GXnICrH1gjJkRp75jQrb/DUl/2xhT5uwfCZzr1OcbEWkuIo2dug7yX2CM2SQip2EXUku4hwAAAg5JREFUhvnBhtchHfgR2ALsAl5wvvI/cS77AXhZRMaGPF+8Z+oHjHHqtVJEvonzTEoKoaKg7DYYY34UkRZALvbrPhdrOZSIyDIgM8ZlQvxwxkXOtozg/4IA1xtjooL/OQJ0KvCqiDxsjHklVjXj7G+PqFOs62LVVbALvAyOUZ++QH+skFwHHGeMuUpEDnHqOUNEesd7JrFLcmqcGyUM9Skouw0isj+2q2MD9mt3rSMIxwL7Otm2Ypde9PMFMEREGjhlNKvkNp8DVzsWASLSVWzk2X2d+z2PjbyZF+f6gSHbH+PkmQhc6JR/DLDe2Dj/X2Abd//zNgUmA0eE+CcaOHXKBhobY8YBN2HXSUBEOhljphhj7saGuW4X75mcegxyfA6tgGMreTdKCqCWglLfyRIRf1eNAJcYY8pE5HXgYxGZStDngDFmg4j8IHbR+s+MMX93vpanikgxMA64vYL7vYDtSpoutr9mHXaJxWOAv4tICbAN6zOIRYaITMF+cEV93TsMB0aJyExgB8EwzvcBTzp1LwP+aYx5T0QuBcaISIaT706s+H0oIpnOe/mrc+5hEenipH2NjZY7M84zvY/1aczCRkP9roL3oqQIGiVVUWoJpwsr3xiz3u26KEp10e4jRVEUJYBaCoqiKEoAtRQURVGUACoKiqIoSgAVBUVRFCWAioKiKIoSQEVBURRFCfD/gX89cr7uw8EAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "l.recorder.plot_losses()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "l.save(f\"speedup_{optimizer}_batch_norm_{batch_norm}_{loss_func}_nlayers_{len(layers_sizes)}_log_{log}_batch1001-2000_ELU\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "val_df = get_results_df(val_dl, l.model)\n",
    "train_df = get_results_df(train_dl, l.model)\n",
    "test_df=get_results_df(test_dl, l.model)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>index</th>\n",
       "      <th>prediction</th>\n",
       "      <th>target</th>\n",
       "      <th>abs_diff</th>\n",
       "      <th>APE</th>\n",
       "      <th>SMAPE</th>\n",
       "      <th>interchange</th>\n",
       "      <th>tile</th>\n",
       "      <th>unroll</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>10000.00000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>1.000000e+04</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>4999.50000</td>\n",
       "      <td>0.401473</td>\n",
       "      <td>0.438427</td>\n",
       "      <td>7.721746e-02</td>\n",
       "      <td>24.536396</td>\n",
       "      <td>25.908989</td>\n",
       "      <td>0.757900</td>\n",
       "      <td>0.940400</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>2886.89568</td>\n",
       "      <td>0.342628</td>\n",
       "      <td>0.384616</td>\n",
       "      <td>1.212221e-01</td>\n",
       "      <td>34.472652</td>\n",
       "      <td>32.096619</td>\n",
       "      <td>0.428376</td>\n",
       "      <td>0.236756</td>\n",
       "      <td>0.433034</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.004559</td>\n",
       "      <td>8.344650e-07</td>\n",
       "      <td>0.000079</td>\n",
       "      <td>0.000079</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>2499.75000</td>\n",
       "      <td>0.080136</td>\n",
       "      <td>0.086719</td>\n",
       "      <td>1.135659e-02</td>\n",
       "      <td>6.358892</td>\n",
       "      <td>6.396956</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>4999.50000</td>\n",
       "      <td>0.281474</td>\n",
       "      <td>0.309265</td>\n",
       "      <td>3.745474e-02</td>\n",
       "      <td>14.694213</td>\n",
       "      <td>15.106338</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>7499.25000</td>\n",
       "      <td>0.722925</td>\n",
       "      <td>0.775881</td>\n",
       "      <td>9.714109e-02</td>\n",
       "      <td>29.855874</td>\n",
       "      <td>31.719110</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>9999.00000</td>\n",
       "      <td>1.264980</td>\n",
       "      <td>2.645030</td>\n",
       "      <td>1.504885e+00</td>\n",
       "      <td>509.495300</td>\n",
       "      <td>200.000015</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             index    prediction        target      abs_diff           APE  \\\n",
       "count  10000.00000  10000.000000  10000.000000  1.000000e+04  10000.000000   \n",
       "mean    4999.50000      0.401473      0.438427  7.721746e-02     24.536396   \n",
       "std     2886.89568      0.342628      0.384616  1.212221e-01     34.472652   \n",
       "min        0.00000      0.000000      0.004559  8.344650e-07      0.000079   \n",
       "25%     2499.75000      0.080136      0.086719  1.135659e-02      6.358892   \n",
       "50%     4999.50000      0.281474      0.309265  3.745474e-02     14.694213   \n",
       "75%     7499.25000      0.722925      0.775881  9.714109e-02     29.855874   \n",
       "max     9999.00000      1.264980      2.645030  1.504885e+00    509.495300   \n",
       "\n",
       "              SMAPE   interchange          tile        unroll  \n",
       "count  10000.000000  10000.000000  10000.000000  10000.000000  \n",
       "mean      25.908989      0.757900      0.940400      0.750000  \n",
       "std       32.096619      0.428376      0.236756      0.433034  \n",
       "min        0.000079      0.000000      0.000000      0.000000  \n",
       "25%        6.396956      1.000000      1.000000      0.750000  \n",
       "50%       15.106338      1.000000      1.000000      1.000000  \n",
       "75%       31.719110      1.000000      1.000000      1.000000  \n",
       "max      200.000015      1.000000      1.000000      1.000000  "
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_df.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>index</th>\n",
       "      <th>prediction</th>\n",
       "      <th>target</th>\n",
       "      <th>abs_diff</th>\n",
       "      <th>APE</th>\n",
       "      <th>SMAPE</th>\n",
       "      <th>interchange</th>\n",
       "      <th>tile</th>\n",
       "      <th>unroll</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>10000.00000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "      <td>10000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>14999.50000</td>\n",
       "      <td>0.392823</td>\n",
       "      <td>0.434748</td>\n",
       "      <td>0.090022</td>\n",
       "      <td>22.633327</td>\n",
       "      <td>25.077196</td>\n",
       "      <td>0.782900</td>\n",
       "      <td>0.947300</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>2886.89568</td>\n",
       "      <td>0.331842</td>\n",
       "      <td>0.526266</td>\n",
       "      <td>0.353471</td>\n",
       "      <td>27.143410</td>\n",
       "      <td>32.464207</td>\n",
       "      <td>0.412292</td>\n",
       "      <td>0.223445</td>\n",
       "      <td>0.433034</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>10000.00000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.004063</td>\n",
       "      <td>0.000003</td>\n",
       "      <td>0.000650</td>\n",
       "      <td>0.000650</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>12499.75000</td>\n",
       "      <td>0.076076</td>\n",
       "      <td>0.088260</td>\n",
       "      <td>0.009691</td>\n",
       "      <td>5.891518</td>\n",
       "      <td>5.908508</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>14999.50000</td>\n",
       "      <td>0.314611</td>\n",
       "      <td>0.323237</td>\n",
       "      <td>0.033802</td>\n",
       "      <td>13.292280</td>\n",
       "      <td>13.411684</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>17499.25000</td>\n",
       "      <td>0.679467</td>\n",
       "      <td>0.683457</td>\n",
       "      <td>0.085446</td>\n",
       "      <td>28.448272</td>\n",
       "      <td>29.197307</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>19999.00000</td>\n",
       "      <td>1.406221</td>\n",
       "      <td>6.865816</td>\n",
       "      <td>5.642678</td>\n",
       "      <td>367.176056</td>\n",
       "      <td>200.000015</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             index    prediction        target      abs_diff           APE  \\\n",
       "count  10000.00000  10000.000000  10000.000000  10000.000000  10000.000000   \n",
       "mean   14999.50000      0.392823      0.434748      0.090022     22.633327   \n",
       "std     2886.89568      0.331842      0.526266      0.353471     27.143410   \n",
       "min    10000.00000      0.000000      0.004063      0.000003      0.000650   \n",
       "25%    12499.75000      0.076076      0.088260      0.009691      5.891518   \n",
       "50%    14999.50000      0.314611      0.323237      0.033802     13.292280   \n",
       "75%    17499.25000      0.679467      0.683457      0.085446     28.448272   \n",
       "max    19999.00000      1.406221      6.865816      5.642678    367.176056   \n",
       "\n",
       "              SMAPE   interchange          tile        unroll  \n",
       "count  10000.000000  10000.000000  10000.000000  10000.000000  \n",
       "mean      25.077196      0.782900      0.947300      0.750000  \n",
       "std       32.464207      0.412292      0.223445      0.433034  \n",
       "min        0.000650      0.000000      0.000000      0.000000  \n",
       "25%        5.908508      1.000000      1.000000      0.750000  \n",
       "50%       13.411684      1.000000      1.000000      1.000000  \n",
       "75%       29.197307      1.000000      1.000000      1.000000  \n",
       "max      200.000015      1.000000      1.000000      1.000000  "
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "val_df.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>index</th>\n",
       "      <th>prediction</th>\n",
       "      <th>target</th>\n",
       "      <th>abs_diff</th>\n",
       "      <th>APE</th>\n",
       "      <th>SMAPE</th>\n",
       "      <th>interchange</th>\n",
       "      <th>tile</th>\n",
       "      <th>unroll</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>285800.000000</td>\n",
       "      <td>285800.000000</td>\n",
       "      <td>285800.000000</td>\n",
       "      <td>2.858000e+05</td>\n",
       "      <td>285800.000000</td>\n",
       "      <td>285800.000000</td>\n",
       "      <td>285800.000000</td>\n",
       "      <td>285800.000000</td>\n",
       "      <td>285800.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>162899.500000</td>\n",
       "      <td>0.391860</td>\n",
       "      <td>0.414619</td>\n",
       "      <td>4.910665e-02</td>\n",
       "      <td>12.998473</td>\n",
       "      <td>14.676644</td>\n",
       "      <td>0.768034</td>\n",
       "      <td>0.944097</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>82503.497805</td>\n",
       "      <td>0.330325</td>\n",
       "      <td>0.446321</td>\n",
       "      <td>2.758215e-01</td>\n",
       "      <td>15.157892</td>\n",
       "      <td>22.287466</td>\n",
       "      <td>0.422088</td>\n",
       "      <td>0.229734</td>\n",
       "      <td>0.433013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>20000.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.002826</td>\n",
       "      <td>8.195639e-08</td>\n",
       "      <td>0.000062</td>\n",
       "      <td>0.000062</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>91449.750000</td>\n",
       "      <td>0.082772</td>\n",
       "      <td>0.089102</td>\n",
       "      <td>6.069705e-03</td>\n",
       "      <td>3.807428</td>\n",
       "      <td>3.813382</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.750000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>162899.500000</td>\n",
       "      <td>0.303796</td>\n",
       "      <td>0.313525</td>\n",
       "      <td>1.949441e-02</td>\n",
       "      <td>8.587076</td>\n",
       "      <td>8.675624</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>234349.250000</td>\n",
       "      <td>0.687946</td>\n",
       "      <td>0.700698</td>\n",
       "      <td>5.104748e-02</td>\n",
       "      <td>16.477762</td>\n",
       "      <td>16.989822</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>305799.000000</td>\n",
       "      <td>1.406889</td>\n",
       "      <td>26.579260</td>\n",
       "      <td>2.563630e+01</td>\n",
       "      <td>351.916443</td>\n",
       "      <td>200.000015</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "               index     prediction         target      abs_diff  \\\n",
       "count  285800.000000  285800.000000  285800.000000  2.858000e+05   \n",
       "mean   162899.500000       0.391860       0.414619  4.910665e-02   \n",
       "std     82503.497805       0.330325       0.446321  2.758215e-01   \n",
       "min     20000.000000       0.000000       0.002826  8.195639e-08   \n",
       "25%     91449.750000       0.082772       0.089102  6.069705e-03   \n",
       "50%    162899.500000       0.303796       0.313525  1.949441e-02   \n",
       "75%    234349.250000       0.687946       0.700698  5.104748e-02   \n",
       "max    305799.000000       1.406889      26.579260  2.563630e+01   \n",
       "\n",
       "                 APE          SMAPE    interchange           tile  \\\n",
       "count  285800.000000  285800.000000  285800.000000  285800.000000   \n",
       "mean       12.998473      14.676644       0.768034       0.944097   \n",
       "std        15.157892      22.287466       0.422088       0.229734   \n",
       "min         0.000062       0.000062       0.000000       0.000000   \n",
       "25%         3.807428       3.813382       1.000000       1.000000   \n",
       "50%         8.587076       8.675624       1.000000       1.000000   \n",
       "75%        16.477762      16.989822       1.000000       1.000000   \n",
       "max       351.916443     200.000015       1.000000       1.000000   \n",
       "\n",
       "              unroll  \n",
       "count  285800.000000  \n",
       "mean        0.750000  \n",
       "std         0.433013  \n",
       "min         0.000000  \n",
       "25%         0.750000  \n",
       "50%         1.000000  \n",
       "75%         1.000000  \n",
       "max         1.000000  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_df.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "gdf_t=pd.DataFrame(train_df.groupby(['name']).mean())\n",
    "gdf_v=pd.DataFrame(val_df.groupby(['name']).mean())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 3600x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sorted_df=val_df.sort_values(by=[\"target\"])\n",
    "label=list(sorted_df.index)\n",
    "mape=sorted_df['APE']\n",
    "index = np.arange(len(label))\n",
    "plt.figure(figsize=(50,10))\n",
    "plt.bar(index, mape)\n",
    "plt.xlabel('function', fontsize=5)\n",
    "plt.ylabel('mape', fontsize=5)\n",
    "plt.xticks(index, label, fontsize=5, rotation=30)\n",
    "plt.title('-')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "sorted_df=train_df.sort_values(by=[\"target\"])\n",
    "label=list(sorted_df.index)\n",
    "mape=sorted_df['APE']\n",
    "index = np.arange(len(label))\n",
    "plt.figure(figsize=(50,10))\n",
    "plt.bar(index, mape)\n",
    "plt.xlabel('function', fontsize=5)\n",
    "plt.ylabel('mape', fontsize=5)\n",
    "plt.xticks(index, label, fontsize=5, rotation=30)\n",
    "plt.title('-')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>prediction</th>\n",
       "      <th>target</th>\n",
       "      <th>abs_diff</th>\n",
       "      <th>APE</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>32.000000</td>\n",
       "      <td>32.0</td>\n",
       "      <td>32.000000</td>\n",
       "      <td>32.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>0.960304</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.068022</td>\n",
       "      <td>6.802162</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.141534</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.129932</td>\n",
       "      <td>12.993227</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>0.311098</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.003884</td>\n",
       "      <td>0.388354</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>0.962318</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.015251</td>\n",
       "      <td>1.525092</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>0.987631</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.026891</td>\n",
       "      <td>2.689058</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1.012899</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.050581</td>\n",
       "      <td>5.058101</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1.219750</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.688902</td>\n",
       "      <td>68.890228</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       prediction  target   abs_diff        APE\n",
       "count   32.000000    32.0  32.000000  32.000000\n",
       "mean     0.960304     1.0   0.068022   6.802162\n",
       "std      0.141534     0.0   0.129932  12.993227\n",
       "min      0.311098     1.0   0.003884   0.388354\n",
       "25%      0.962318     1.0   0.015251   1.525092\n",
       "50%      0.987631     1.0   0.026891   2.689058\n",
       "75%      1.012899     1.0   0.050581   5.058101\n",
       "max      1.219750     1.0   0.688902  68.890228"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = val_df\n",
    "df[(df.interchange==0) & (df.unroll == 0) & (df.tile == 0)][['prediction','target', 'abs_diff','APE']].describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAacAAAGqCAYAAACvcYtGAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjAsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+17YcXAAAgAElEQVR4nO3deXxU5dn/8c+VECCsAdnXCFSgRRbFB3DFDRGpolUrS/V5tFJbLdX+cEGtUqu2Pmpb6+NSl4oioHUBFbSA4IIWFxQQFBEEAYOyyA4xCeT6/ZEhDZDAZJKZc2bm+3695kVm5sx9vhmSc+W+zz3nNndHREQkTDKCDiAiIrI/FScREQkdFScREQkdFScREQkdFScREQkdFScREQkdFSeJipnlmpmbWY3I/dfM7JJoto1hXzea2WNVyRvlfqqUUypmZl+Z2WlB55DklWzFyXWL7XbGGWf4LbfccsDjL730krdo0cJ379590NevXLlyJUBRUVER4O4+0N3HRbPtwW5vvvmmt2nTZp/H3P0Od78s3u9JVXPG4xbLfnJzc71mzZq+cePGfR7v2bOnm5l/9dVX+zw+duxYNzP/4IMP9nl83LhxnpmZ6fXq1fMGDRp4z549ferUqaW5MjIyvF69evvc5s6dW26m9u3bt585c+bMeL9fKXCTCiRbcZIY/fd//zfjx49n/w9djx8/nuHDh1OjhjoPyezwww9n0qRJpfcXLVpEfn7+Adu5O+PHj6dx48Y8+eSTBzzfr18/duzYwZYtW7jsssu48MIL2bRpEwCtWrVix44d+9z69esXv29K0pqKU5oYMmQImzZtYs6cOaWPbd68malTp3LxxRcDMG3aNHr16kWDBg1o27YtY8eOrbC9/v3789hjJSNve/bsYfTo0TRp0oQOHTowbdq0fbZ94okn6Nq1K/Xr16dDhw78/e9/B2Dnzp2ceeaZrF27lnr16lGvXj3Wrl3L2LFjGTFiROnrX375ZX70ox+Rk5ND//79WbJkSelzubm53HPPPXTv3p2GDRvy05/+lO+//77czNWd84MPPqBfv37k5OTQsmVLrrrqKgoLC4GSInDNNdfQrFkzGjZsSPfu3Vm8eDEABQUFjB49mnbt2tG8eXOuuOIK8vPzK9xPNH72s5/x1FNPld5/8sknS/9fy5ozZw5r167lvvvu45lnninNu7+MjAwuvfRS8vPzWbFiRVQZKlJQUMDVV19Nq1ataNWqFVdffTUFBQUAbNy4kcGDB5OTk0Pjxo054YQTKC4uBuCuu+6idevW1K9fn86dOzNr1qwq5ZAk4+7JdAvchPdW+YT3VgUdIyY///nP/bLLLiu9//DDD3uPHj1K77/xxhv+ySef+J49e3zhwoXerFkznzx5sru7r1y50gEvKipyd/eTTjrJH330UXd3f+ihh7xz586+evVq/+6777x///77bDt16lRfvny5FxcX+5tvvunZ2dn+0Ucfle6zdevW++S89dZbffjw4e7uvnTpUq9Tp47PmDHDCwsL/a677vKOHTt6QUGBu7u3b9/ejznmGM/Ly/PvvvvOu3Tp4g899FC5339155w3b57PnTvXi4qKfOXKld6lSxf/y1/+4u7u//rXv/yoo47yzZs3e3FxsX/22We+du1ad3f/zW9+4z/+8Y/9u+++823btvngwYP9hhtuqHA/h9K+fXufOXOmH3HEEf7ZZ5/57t27vU2bNqXDeStXrizd9tJLL/ULLrjACwsLvXHjxv7CCy+UPvfEE0/4cccd5+7uRUVF/te//tXr1avnW7ZsqXSuvZnc3X/3u995nz59fN26db5+/Xrv16+f33zzze7ufsMNN/gvfvELLyws9MLCQn/77be9uLjYP//8c2/Tpo3n5eW5e8nP3/Llyyv1viSJoI+pob2p55RGLrnkEp577rnS4Z6nnnqKSy65pPT5/v37c+SRR5KRkUH37t0ZOnQob7311iHb/ec//8nVV19N27Ztady4MWPGjNnn+bPOOouOHTtiZpx00kkMGDBgnx7cwTz77LOcddZZnH766WRlZTF69Gjy8/P597//XbrNqFGjaNWqFY0bN+bHP/4xCxYsSEjOo48+mr59+1KjRg1yc3P5xS9+Ufp+ZWVlsX37dj7//HPcna5du9KyZUvcnUcffZS//OUvNG7cmPr163PjjTfyzDPPRPV+HMze3tPMmTPp0qULrVu33uf5Xbt28dxzzzFs2DCysrI4//zzDxjae++998jJyaFFixZMmjSJyZMn07BhQwDWrl1LTk7OPredO3ceMteECRO45ZZbaNasGU2bNuXWW29l/Pjxpe/TN998w6pVq8jKyuKEE07AzMjMzKSgoIDPPvuMoqIicnNz6dixY5XfI0keKk5p5Pjjj6dp06a89NJLrFixgg8//JBhw4aVPv/+++9z8skn07RpUxo2bMjDDz/Mxo0bD9nu2rVradu2ben99u3b7/P8a6+9Rt++fWncuDE5OTm8+uqrUbW7t+2y7WVkZNC2bVvy8vJKH2vRokXp13Xq1GHHjh0JyfnFF18wePBgWrRoQYMGDbjxxhtLtz/llFO46qqruPLKK2nevDkjR45k27ZtbNiwgV27dnH00UeXHuAHDhzIhg0bono/DuZnP/sZEydOZNy4ceUO6U2ePJkaNWowaNAgAIYPH85rr722z7779u3Lli1b2LhxI++99x6nnfafCXetWrViy5Yt+9zq1q17yFz7/x+2b9++dLjy2muvpVOnTgwYMIAOHTrwpz/9CYBOnTrx17/+lbFjx9KsWTMuuuiiqIc4JTWoOKWZiy++mKeeeorx48czYMAAmjdvXvrcsGHDOPvss1mzZg1bt27liiuuOGACRXlatmzJmjVrSu+vXr269OuCggJ+8pOfMHr0aNatW8eWLVsYNGhQabtmdtC2W7VqxapVq0rvuztr1qw5oFcQjerO+ctf/pIuXbqwbNkytm3bxp133rnP+zVq1Cg++ugjPv30U7744gvuvvtumjRpQnZ2Np9++mnpAX7r1q2lBfVQ78fBtG/fnsMPP5xXX32V884774Dnn3zySXbs2EG7du1o0aIFF1xwAUVFRftMpIiH/f8PV69eTatWrQCoX78+9957LytWrOCVV17hz3/+c+m5pWHDhvHOO++watUqzIzrr78+rjklXFSc0szFF1/M66+/zqOPPrrPkB7A9u3bady4MbVr1+aDDz5g4sSJUbV54YUX8re//Y2vv/6azZs3l/71C1BYWEhBQQFNmzalRo0avPbaa8yYMaP0+ebNm/Pdd9+xdevWCtueNm0as2bNoqioiHvvvZdatWpx7LHHVvp7r+6c27dvp0GDBtSrV4/PP/+chx56qPS5Dz/8kPfff5+ioiLq1q1L7dq1yczMJCMjg8svv5xrrrmG9evXA5CXl8f06dMr3M+bb74ZddF6/PHHmT179gE9mry8PGbNmsXUqVNZsGABCxYsYOHChVx//fXlztqrTkOHDuX2229nw4YNbNy4kdtuu610wsvUqVNZvnw57k6DBg3IzMwkMzOTpUuXMnv2bAoKCqhduzbZ2dlkZmbGNaeEi4pTmsnNzeXYY49l586dnH322fs89+CDD3LLLbdQv359brvtNi688MKo2rz88ss544wz6NGjB0cdddQ+f7XXr1+fv/3tb1x44YU0atSIiRMn7rPfLl26MHToUDp06EBOTs4BQzedO3fm6aef5te//jVNmjThlVde4ZVXXqFmzZqV/t6rO+c999zDxIkTqV+/Ppdffjk//elPS7fftm0bl19+OY0aNaJ9+/YcdthhjB49GiiZhdapUyf69u1LgwYNOO2001i6dGmF+1mzZk3UU7Y7duxI7969D3h8/Pjx9OzZkwEDBtCiRYvS26hRo/jkk09KZxIeTNlZhHtvL7zwwiFfd/PNN9O7d2+6d+/OkUceyVFHHcXNN98MwLJlyzjttNOoV68e/fr141e/+hX9+/enoKCAG264gSZNmtCiRQvWr1/PnXfeGdV7IKnBohm2CZHAw058v2QoaFifdgEnkXTx85//nAsuuIAzzjgj6ChS/WIfx01x+uSlSMjt/TyZSDrRsJ6IiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiISOipOIiIROjaADJKuJ768u/XpYn3YBJhERST3qOYmISOioOImISOioOImISOjonFM1KHv+aS+dhxIRiZ2KUwJpEoWISHQ0rCciIqGjnlOcqJckIhI7FacEKO+clIiIVEzDeiIiEjoqTgGZ+P5q9ahERCqg4iQiIqGj4iQiIqGj4iQiIqGj4iQiIqGj4iQiIqGj4iQiIqGj4iQiIqGj4iQiIqGjyxcFLJZr8JX3Gl3Lr/rsfS/Lvo96f0USy9w96AxRM7N/AU1ieGkTYGM1xQhjW2HMFNa2wpgprG2FMVNY24q1nY3uPrAa9p9ykqo4xcrM5rl771RtK4yZwtpWGDOFta0wZgprW9WZSUronJOIiISOipOIiIROuhSnR1K8rTBmCmtbYcwU1rbCmCmsbVVnJiFNzjmJiEhySZeek4iIJBEVJxERCR0VJxERCR0VJxERCZ2kKk4DBw50QDfddNMtVW5RS9HjX4WSqjht3FhdVywREUku6Xb8S6riJCIi6UHFSUREQkfFSUREQkfFSUREQkfFSUREQkfFSUREQkfFSUREQkfFSUREQkfFSUREQkfFSUREQifuxcnM/mFm681scTnPjTYzN7Mm8c4hIiLJIxE9p3HAwP0fNLO2wOnA6gRkEBGRJBL34uTubwObynnqL8B1VPLKvCIikvoCOedkZmcDee6+MIptR5rZPDObt2HDhgSkExGJzqpVq+Lafjof/xJenMysDnATcEs027v7I+7e2917N23aNL7hRESiNHHiRI444gg++OCDuO0jnY9/QfScOgKHAwvN7CugDfCxmbUIIIuISEzOPPNMRo8eTa9evYKOkpISXpzcfZG7N3P3XHfPBb4GjnL3bxOdRUSkst544w327NlDo0aNuOOOO8jKygo6UkpKxFTyScBcoLOZfW1ml8V7nyIi8TB//nxOOeUU7r///qCjpLwa8d6Buw89xPO58c4gIlIdevXqxaRJkxgyZEjQUVKerhAhInIIzz33HF9++SUAF110EbVr1w44UepTcRIROYjt27dz1VVXMXbs2KCjpJW4D+uJiCSz+vXr89Zbb9G2bdugo6QV9ZxERMrx4osv8ve//x2ALl26ULdu3YATpRcVJxGR/bg7Tz/9NE899RS7d+8OOk5a0rCeiEgZ7o6ZMWnSJAoKCqhRQ4fJIKjnJCIS8dprrzF48GB27dpFrVq1aNCgQdCR0paKk4hIxHfffcf69espKCgIOkraU3ESkbSXn58PwIgRI5g7dy6NGjUKOJGoOIlIWpszZw4dO3Zk3rx5ADrHFBKBLNNuZn8ws0/MbIGZzTCzVvHOISJSntzcXI455hjatWsXdBQpI6hl2u929+7u3hOYSpRrO4mIVJdVq1bh7rRt25aXXnqJZs2aBR1JyghkmXZ331bmbl20VLuIJNDy5cs58sgjuffee4OOIhUIbHDVzO4ALga2AicfZLuRwEhA3W4RqRYdOnRg9OjRDB160EUTApfOxz9zj3+nxcxyganu3q2c58YAtd391kO107t3b9970lJEpLIWLlxIy5YtwzSEZ9FumKLHvwq//zDM1psI/CToECKS2goKChg8eDD/8z//E3QUiUIgw3pm9gN3Xxa5ezbweRA5RCR91KpViwkTJujq4kki7sUpskx7f6CJmX0N3AoMMrPOQDGwCrgi3jlEJD0tXryYlStX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\n",
      "text/plain": [
       "<Figure size 432x432 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "df1 = val_df[(df.interchange==0) & (df.unroll == 0) & (df.tile == 0)]\n",
    "#joint_plot(df1, f\"Validation dataset, {loss_func} loss\")\n",
    "df2 = val_df\n",
    "joint_plot(df2, f\"Validation dataset, {loss_func} loss\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [],
   "source": [
    "df_ = val_df.sort_values(by=[\"APE\"])\n",
    "\n",
    "df_['x'] = range(len(df_))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x7f7142246208>"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot('x', 'APE', 'bo', data=df_)\n",
    "\n",
    "\n",
    "plt.xlabel('scheduled program')\n",
    "plt.ylabel('APE')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "l = l.load(f\"speedup_{optimizer}_batch_norm_{batch_norm}_{loss_func}_nlayers_{len(layers_sizes)}_log_{log}_batch1001-2000_ELU\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
